package com.by.log.handler;

import com.by.log.entity.StatisticData;

import java.util.List;
import java.util.Map;

/**
 * 统计数据收集器，负责聚合方法调用指标
 */
public interface StatisticCollector {
    /**
     * 记录方法调用
     */
    void recordCall(boolean success, long responseTime);

    /**
     * 获取当前周期的统计数据并重置计数器
     */
    Map<String, StatisticData> collectAndReset();
    
    /**
     * 获取当前周期的统计数据但不重置计数器
     */
    default Map<String, StatisticData> collect() {
        // 默认实现，子类应该重写此方法
        return collectAndReset();
    }
    
    /**
     * 获取最近一分钟的统计数据
     * @return 统计数据
     */
    default StatisticData getLastMinuteStats() {
        return null;
    }
    
    /**
     * 获取QPS（每秒查询率）
     * @return QPS值
     */
    default double getQPS() {
        return 0.0;
    }

    default double getMethodSuccessRate(String route) {
        return 0.0;
    }

    default  double getMethodAverageResponseTime(String route) {
        return 0.0;
    }

    default List<StatisticData> getMethodStatistics(String route) {
        return null;
    }

    /**
     * 获取成功率
     * @return 成功率（0-1之间的值）
     */
    default double getSuccessRate() {
        return 0.0;
    }
    
    /**
     * 获取平均响应时间
     * @return 平均响应时间（毫秒）
     */
    default double getAverageResponseTime() {
        return 0.0;
    }
    
    /**
     * 获取当前调用总数
     * @return 调用总数
     */
    default long getCallCount() {
        return 0;
    }
    
    /**
     * 获取成功调用数
     * @return 成功调用数
     */
    default long getSuccessCount() {
        return 0;
    }
    
    /**
     * 获取失败调用数
     * @return 失败调用数
     */
    default long getFailCount() {
        return 0;
    }
}